package github.ziwukun.jsonql.lang;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 排序语句
 * @author Hugo.Yu
 */
public interface Sort extends ToJSONQLable,Serializable{
	public static Sort readJson(String json) {
		return SortJson.readJson(json);
	}
	
	public static SortBuilder builder() {
		return new SortBuilder();
	}
	
	/**属性排序列表*/
	List<PropSort> propSorts();
	/**排序列表是否为空*/
	boolean isEmpty();
	boolean containProp(String propName);
	/**通过属性名称获取属性排序说明*/
	PropSort getPsByProp(String propName);
	
	/**替换属性的名称*/
	Sort repProp(String propName,String newName);
	/**替换属性的名称 key旧名称 valu新名称*/
	Sort repProps(Map<String, String> propNames);
	/**添加排序方式*/
	Sort add(PropSort propSort);
	/**添加排序方式 添加到第一个*/
	Sort addFirst(PropSort propSort);
	
	public static Sort linkPropSorts(List<PropSort> propSorts) {
		return new SortImpl(propSorts);
	}
}
